﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;


namespace SimpleGameAppWithCCR.NComp
{


    class Map
    {
        public List<Movable> _List = new List<Movable>();
    }

    class Movable : GOCS.GComponent
    {
        static Map _Map = new Map();

        Vector2 _Vel = new Vector2(2, 2);
        
        public Movable()
        {
            _Map._List.Add(this);
            
        }

        public override String GetCompType()
        {
            return typeof(Movable).Name;
        }

        public void Update()
        {
            Sprite sprite = _Owner.getComponent<Sprite>();

            sprite._mPosition += _Vel;

            if (sprite._mPosition.X < 0 || sprite._mPosition.Y < 0)
                _Vel = new Vector2(2, 2);

            if (8000 < sprite._mPosition.X  || 8000 < sprite._mPosition.Y )
                _Vel = new Vector2(-2, -2);


            if (sprite._mPosition.X < 600 && sprite._mPosition.Y < 600)
                Sprite._RenderList.Add(sprite);

            foreach (Movable obj in _Map._List)
            {
                if (obj != this)
                {
                    Sprite otherSprite = obj._Owner.getComponent<Sprite>();


                    if (Vector2.Distance(sprite._mPosition, otherSprite._mPosition) < 50)
                    {
                        _Vel = -_Vel;
                    }
                }
            }



        }

    }
}



//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Microsoft.Xna.Framework;
//using System.Drawing;

//namespace SimplaGameApp.NComp
//{


//    class Map
//    {

//        public QuadTreeLib.QuadTree<Movable> _QuadTree = new QuadTreeLib.QuadTree<Movable>(new RectangleF(0, 0, 1024, 1024));

//        public void Add(Movable obj)
//        {
//            _QuadTree.Insert(obj);
//        }



//        //public List<Movable> _List = new List<Movable>();
//    }

//    class Movable : GOCS.GComponent , QuadTreeLib.IHasRect<Movable>
//    {
//        static Map _Map = new Map();
        
//        public Movable()
//        {
//            _Map.Add(this);

//        }

//        RectangleF _Rectangle = new RectangleF();

//        public RectangleF Rectangle { 
//            get {
//                return _Rectangle; 
//            }
//            set{
//                _Rectangle = value;
//            }
//        }
//        public QuadTreeLib.QuadTreeNodeBase<Movable> _Node;

//        public QuadTreeLib.QuadTreeNodeBase<Movable> Node
//        {
//            get
//            {
//                return _Node;
//            }
//            set
//            {
//                _Node = value;
//            }

//        }


        
//        public override String GetCompType()
//        {
//            return typeof(Movable).Name;
//        }

//        public void Update()
//        {
//            Sprite sprite = _Owner.getComponent<Sprite>();

//            sprite._mPosition.X += Game1._Rand.Next(5) -2;
            
//            sprite._mPosition.Y += Game1._Rand.Next(5)-2;

            



//            //foreach (Movable obj in _Map._List)
//            //{
//            //    if (obj != this)
//            //    {
//            //        Sprite otherSprite = obj._Owner.getComponent<Sprite>();

                    

//            //        if (sprite._mPosition.X == otherSprite._mPosition.X
//            //            && sprite._mPosition.Y == otherSprite._mPosition.Y)
//            //        {
//            //            sprite._mPosition.X += Game1._Rand.Next(5) - 2;

//            //            sprite._mPosition.Y += Game1._Rand.Next(5) - 2;

//            //        }
//            //    }
//            //}

//        }

//    }
//}

